﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Algoritmi
{
    public interface IAlgorithm
    {
        /// <summary>
        /// set the algorithm parameters
        /// </summary>
        /// <param name="parameters"></param>
        void setParams(object[] parameters);
        /// <summary>
        /// computations (if any) that should not run prior to the main run 
        /// and should not be counted in energy consumption
        /// </summary>
        void ignorePhase();
        /// <summary>
        /// the main computation phase
        /// will be counted in energy consumption
        /// </summary>
        void runPhase();
        /// <summary>
        /// gets the algorithm parameters for this step
        /// </summary>
        /// <param name="step"></param>
        /// <returns></returns>
        object[] getParameters(int step);
        /// <summary>
        /// returns the number of steps
        /// </summary>
        /// <returns></returns>
        int steps();
        /// <summary>
        /// gets the names of the parameters
        /// </summary>
        /// <returns></returns>
        string[] getParametersNames();
    }
}
